package 牛客算法篇;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2024-03-05
 * Time:14:43
 */

/**
 *
 牛客算法篇:BM36 判断是不是平衡二叉树
 描述
 输入一棵节点数为 n 二叉树，判断该二叉树是否是平衡二叉树。
 在这里，我们只需要考虑其平衡性，不需要考虑其是不是排序二叉树
 平衡二叉树（Balanced Binary Tree），具有以下性质：它是一棵空树或它的左右两个子树的高度差的绝对值不超过1，并且左右两个子树都是一棵平衡二叉树。
 样例解释：
 样例二叉树如图，为一颗平衡二叉树
 注：我们约定空树是平衡二叉树。
 数据范围：n≤100n≤100,树上节点的val值满足 0≤n≤10000≤n≤1000
 要求：空间复杂度O(1)O(1)，时间复杂度 O(n)O(n)
 输入描述：
 输入一棵二叉树的根节点
 返回值描述：
 输出一个布尔类型的值
 示例1
 输入：
 {1,2,3,4,5,6,7}
 返回值：
 true
 */
public class IsBalanced_Solution {
    public boolean IsBalanced_Solution (TreeNode root) {
        // write code here
        if (root == null) return true;

        return Math.abs(maxDepth(root.left) - maxDepth(root.right)) <= 1 &&
                IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
    }
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        int num = 1;
        num += Math.max(maxDepth(root.left), maxDepth(root.right));
        return num;
    }
}
